package in.lib.view.spannable; import in.lib.Constants; import in.lib.URLMatcher; import in.lib.helper.ThemeHelper; import in.lib.manager.SettingsManager; import in.lib.utils.URLUtils; import in.obj.annotation.Annotation; import in.obj.annotation.Annotation.Type; import in.obj.annotation.ImageAnnotation; import in.rob.client.R; import in.rob.client.dialog.ImageLightboxDialog; import in.rob.client.dialog.base.DialogBuilder; import java.util.ArrayList; import java.util.HashMap; import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.net.Uri; import android.view.MotionEvent; import android.view.View; import android.widget.Toast; public class UrlClickableSpan extends NotUnderlinedClickableSpan { private String mUrl; public UrlClickableSpan(String url) { mUrl = url; if (!mUrl.startsWith("http://") && !url.startsWith("https://")) { mUrl = "http://" + mUrl; } } @Override public boolean onTouch(View widget, MotionEvent m) { return false; } @Override public void onSimpleClick(View widget) { super.onSimpleClick(widget); HashMap<Type, ArrayList<Annotation>> annotations = (HashMap<Type, ArrayList<Annotation>>)widget.getTag(R.id.TAG_ENTITY); Context ctx = widget.getContext(); Intent intent = null; boolean isImage = URLUtils.isImage(Uri.parse(mUrl)); // check if the url exists in annotations as an embeddable image link // e.g. photos.app.net if (annotations != null) { for (int index = 0, count = annotations.get(Type.IMAGE).size(); index < count; index++) { if (((ImageAnnotation)annotations.get(Type.IMAGE).get(index)).getEmbeddableUrl().equals(mUrl)) { mUrl = ((ImageAnnotation)annotations.get(Type.IMAGE).get(index)).getUrl(); isImage = true; break; } } } if (isImage) { if (SettingsManager.isImageViewerEnabled()) { if (annotations != null) { int pos = 0; ArrayList<String> imageUrl = new ArrayList<String>(); ArrayList<String> webUrl = new ArrayList<String>(); for (int index = 0, count = annotations.get(Type.IMAGE).size(); index < count; index++) { String url = ((ImageAnnotation)annotations.get(Type.IMAGE).get(index)).getUrl(); String wUrl = ((ImageAnnotation)annotations.get(Type.IMAGE).get(index)).getEmbeddableUrl(); //if (!imageUrl.contains(url) && !webUrl.contains(wUrl) && !webUrl.contains(url)) if (!imageUrl.contains(url) && !webUrl.contains(wUrl)) { imageUrl.add(url); webUrl.add(wUrl); if (((ImageAnnotation)annotations.get(Type.IMAGE).get(index)).getUrl().equals(mUrl)) { pos = index; } } } intent = new Intent(ctx, ImageLightboxDialog.class); intent.putExtra(Constants.EXTRA_WEB_URL, webUrl.toArray(new String[webUrl.size()])); intent.putExtra(Constants.EXTRA_PREVIEW_URL, imageUrl.toArray(new String[imageUrl.size()])); intent.putExtra(Constants.EXTRA_IMAGE_POSITION, pos); } else { intent = new Intent(ctx, ImageLightboxDialog.class); intent.putExtra(Constants.EXTRA_PREVIEW_URL, mUrl); } } else { intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(mUrl)); } ctx.startActivity(intent); } else { openUrl(ctx); } } public void openUrl(Context ctx) { Intent intent = null; if (SettingsManager.isLightboxEnabled()) { if (URLUtils.isYoutubeVideo(Uri.parse(mUrl))) { intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(mUrl)); } else { intent = new Intent(ctx, URLMatcher.class); intent.setData(Uri.parse(mUrl)); } } if (intent == null) { intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(mUrl)); } ctx.startActivity(intent); } @Override public void onLongClick(View widget) { final Context ctx = widget.getContext(); DialogBuilder.create(ctx) .setIcon(ThemeHelper.getDrawableResource(ctx, R.attr.rbn_dialog_icon_link)) .setTitle(mUrl) .setItems(new CharSequence[] { ctx.getString(R.string.open_url), ctx.getString(R.string.copy_url), ctx.getString(R.string.share_url) }, new OnClickListener() { @Override @TargetApi(11) public void onClick(DialogInterface dialog, int which) { if (which == 0) { openUrl(ctx); } else if (which == 1) { if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) { android.text.ClipboardManager clipboard = (android.text.ClipboardManager)ctx.getSystemService(Context.CLIPBOARD_SERVICE); clipboard.setText(mUrl); } else { android.content.ClipboardManager clipboard = (android.content.ClipboardManager)ctx.getSystemService(Context.CLIPBOARD_SERVICE); android.content.ClipData clip = android.content.ClipData.newPlainText("Copied Text", mUrl); clipboard.setPrimaryClip(clip); } Toast.makeText(ctx, ctx.getString(R.string.copy_url_success), Toast.LENGTH_SHORT).show(); } else if (which == 2) { Intent shareIntent = new Intent(Intent.ACTION_SEND); shareIntent.putExtra(Intent.EXTRA_TEXT, mUrl); shareIntent.setType("text/plain"); ((Activity)ctx).startActivity(Intent.createChooser(shareIntent, ctx.getString(R.string.share_via))); } } }) .show(); } }